package com.newbie.pet.wrap;

import com.newbie.pet.constant.ResultStatus;
import com.newbie.pet.constant.ResultStatusT;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 类描述：响应类实体
 *
 * @author zhangkailiang
 * @date 2020/5/23
 */
@ApiModel(description = "响应信息")
@Data
@Accessors(chain = true)
public class R<T> {
    /**
     * 服务状态
     */
    @ApiModelProperty(value = "服务状态", required = true)
    private Integer status;
    /**
     * 服务状态说明
     */
    @ApiModelProperty(value = "服务状态说明")
    private String msg;
    /**
     * 实体内容
     */
    @ApiModelProperty(value = "实体内容")
    private T body;

    /**
     * 设置返回状态
     *
     * @param resultStatus
     */
    public R setResultStatus(ResultStatus resultStatus) {
        this.status = resultStatus.getStatus();
        this.msg = resultStatus.getMsg();
        return this;
    }

    /**
     * 设置返回状态
     *
     * @param resultStatus
     */
    public R setResultStatus(ResultStatusT resultStatus) {
        this.status = resultStatus.getStatus();
        this.msg = resultStatus.getMsg();
        return this;
    }

    public R(ResultStatus resultStatus) {
        this.status = resultStatus.getStatus();
        this.msg = resultStatus.getMsg();
    }

    /**
     * 创建成功对象
     *
     * @return
     */
    public static R ok() {
        return new R(ResultStatus.SUCCESS);
    }

    /**
     * 创建成功对象
     *
     * @return
     */
    public static <T> R<T> ok(T t) {
        return new R(ResultStatus.SUCCESS).setBody(t);
    }

    /**
     * 创建失败对象
     *
     * @return
     */
    public static R error() {
        return new R(ResultStatus.ERROR);
    }
}
